Шаг 883 - CMenu::DrawItem.

Автор Каев А. Г.
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );

Параметры
lpDrawItemStruct
Указатель на структуру DRAWITEMSTRUCT, которая содержит информацию относительно типа требуемого рисунка.

Замечания
Вызванный рамкой, когда визуальный аспект выведенных владельцем меню изменился . ItemAction член структуры DRAWITEMSTRUCT определяет действие рисунка, которое должно выполниться. Перегрузите эту функцию, чтобы выполнить рисунок для владельца - выводящегося объект CMenu. Прикладная программа должна восстановить все графические объекты (GDI) интерфейса устройства, выбранные для контекста дисплея, обеспеченного в lpDrawItemStruct перед завершением этой функции.

Пример

// Перегрузите DrawItem () чтобы выполнить рисунок для владельца - выводящегося объект CMenu.
// CColorMenu - класс наследник CMenu.

void CColorMenu::DrawItem(LPDRAWITEMSTRUCT lpDIS)
{
   CDC* pDC = CDC::FromHandle(lpDIS->hDC);
   COLORREF cr = (COLORREF)lpDIS->itemData; // RGB в данных элемента

   if (lpDIS->itemAction & ODA_DRAWENTIRE)
   {
      // Красьте цветной элемент в запрошенном цвете
      CBrush br(cr);
      pDC->FillRect(&lpDIS->rcItem, &br);
   }

   if ((lpDIS->itemState & ODS_SELECTED) &&
      (lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
   {
      //  Элемент был выбран - hilite рамка
      COLORREF crHilite = RGB(255-GetRValue(cr),
                  255-GetGValue(cr), 255-GetBValue(cr));
      CBrush br(crHilite);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }

   if (!(lpDIS->itemState & ODS_SELECTED) &&
      (lpDIS->itemAction & ODA_SELECT))
   {
      // Отменили выбор элемента- удаляем рамку
      CBrush br(cr);
      pDC->FrameRect(&lpDIS->rcItem, &br);
   }
}

Hosted by uCoz